package com.zhj.structure.linear.utils;

/**
 * @PackageName:com.zhj.structure.utils
 * @ClassName:Recursive
 * @auter: 朱慧杰
 * @date:2020/8/8 0008 16:28
 **/
public class Recursive {

    // 递归
    public void print(int i) {
        // 当它不进入它自己   程序结束
        if (i>0) {
            System.out.println(i);
            print(i-1);
        }
    }

    // 递归打印 第N项  斐波那契数列
    public int printFebonacci(int i) {
        if (i==1 || i==2) {
            return 1;
        } else {
            return printFebonacci(i - 1) + printFebonacci(i - 2);
        }
    }

    /**
     * 汉诺塔问题
     * @param n N 个盘子
     * @param from 开始的柱子
     * @param in   中间的柱子
     * @param to   目标的柱子
     */
    public void hanoi(int n,char from,char in,char to) {
        // 只有一个
        if(n==1) {
            System.out.println("将第 " + n + " 个珠子从 " + from + " 移动到 " + to);
            // 无论有多少个，都只认为有两个，上边所有和最下边一个
        } else {
            // 移动上边所有珠子到中间柱子
            hanoi(n-1,from,to,in);
            // 移动下边珠子移动到目标柱子
            System.out.println("将第 " + n + " 个珠子从 " + from + " 移动到 " + to);
            // 将上边所有移动到目标柱子
            hanoi(n-1,in,from,to);
        }
    }

}
